<?php
require_once 'Zend/Form/Decorator/Abstract.php';
class Clound_Xml_Decorator_SimpleInput extends Zend_Form_Decorator_Abstract
{
    protected $inputOptions = array();
    protected $labelOptions = array();
    protected $blockOptions = array();
    public function buildLabel()
    {
        $element = $this->getElement();
        $label = $element->getLabel();
        if ($translator = $element->getTranslator()) {
            $label = $translator->translate($label);
        }
        if ($element->isRequired()) {
			if($label!=''){
				$label .= '*';
			}
			$element->setAttrib('required', 'required');
        }
        return $element->getView()
                       ->formLabel($element->getName(), $label,$this->labelOptions);
    }
 
    public function buildInput()
    {
        $element = $this->getElement();
        $helper  = $element->helper;
        return $element->getView()->$helper(
            $element->getName(),
            $element->getValue(),
            $this->inputOptions,
            $element->options
        );
    }
 
    public function buildErrors()
    {
        $element  = $this->getElement();
        $messages = $element->getMessages();
        if (empty($messages)) {
            return '';
        }
        return '<div class="errors">' .
               $element->getView()->formErrors($messages) . '</div>';
    }
 
    public function buildDescription()
    {
        $element = $this->getElement();
        $desc    = $element->getDescription();
        if (empty($desc)) {
            return '';
        }
        return '<div class="description">' . $desc . '</div>';
    }
 
    public function render($content)
    {
        $element = $this->getElement();

        if (!$element instanceof Zend_Form_Element) {
            return $content;
        }
        if (null === $element->getView()) {
            return $content;
        }
        $arrAttr = $element->getAttribs();
        if ($element->isRequired()) {
            $arrAttr['required'] = 'required';
        }
        $class = '';
        if (isset($arrAttr['blockoptions'])) {
            $this->blockOptions = $arrAttr['blockoptions'];
            unset($arrAttr['blockoptions']);
        }
        $this->blockOptions = array_merge_recursive(array('class' => 'form element'), $this->blockOptions);
        if(isset($arrAttr['labeloptions'])){
            $this->labelOptions = $arrAttr['labeloptions'];
            unset($arrAttr['labeloptions']);
        }
        $this->inputOptions = $arrAttr;

        $separator = $this->getSeparator();
        $placement = $this->getPlacement();
        $label     = $this->buildLabel();
        $input     = $this->buildInput();
        $errors    = $this->buildErrors();
        $desc      = $this->buildDescription();
        $output = '<div '.$this->_htmlAttribs($this->blockOptions) .'>'
                . $label
                . $input
                . $errors
                . $desc
                . '</div>';
				
        switch ($placement) {
            case (self::PREPEND):
                return $output . $separator . $content;
            case (self::APPEND):
            default:
                return $content . $separator . $output;
        }
    }
    public function _htmlAttribs($attrs){
        if(is_null($attrs))
            return '';
        $htmlAttr = '';
        foreach ($attrs as $key => $value) {
            if (is_array($value)) {
                $value = implode(' ', $value);
            }
            $htmlAttr .= $key.'="'.$value.'" ';
        }
        return $htmlAttr;
    }
}
